package net.suplementos.web.action;

import java.util.List;

import net.suplementos.negocio.ControleDelegate;
import net.suplementos.pojo.Cliente;
import net.suplementos.pojo.Usuario;
import net.suplementos.servico.ControleServico;
import net.suplementos.web.LocalConstantes;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.InterceptorRefs;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;

import com.opensymphony.xwork2.ActionSupport;

@Namespace("/manterCliente")
@InterceptorRefs({
	@InterceptorRef(value = "store", params = {"operationMode", "AUTOMATIC"}),
	@InterceptorRef("defaultStack")
})
public class ManterClienteAction extends ActionSupport {
	
	private Cliente cliente;
	private List<Cliente> resultadoConsulta;
	private ControleServico controleServico = ControleDelegate.getInstance();

	private static final String NOME_ENTIDADE_SINGULAR = "Cliente";
	private static final String FORWARD_REALIZAR_ATENDIMENTO = "realizarAtendimento";
	private static final String NOME_ENTIDADE_PLURAL = "Clientes";
	
	private String origem = "";

	@Action(value = "abrirConsultar", results = {
		@Result(name = SUCCESS, location = LocalConstantes.LOCAL_JSP_CONTROLE_CLIENTE + "/consultar.jsp") 
	})
    public String abrirConsultar() throws Exception {
        return SUCCESS;
    }

	@Action(value = "consultar", results = {
		@Result(name = SUCCESS, location = LocalConstantes.LOCAL_JSP_CONTROLE_CLIENTE + "/listar.jsp"),
		@Result(name = FORWARD_REALIZAR_ATENDIMENTO, params = {
			"actionName", "abrirConsultar", 
			"namespace", "/selecionarCliente"
		}, type = "redirectAction")
	})
	public String consultar() throws Exception {
		if (getOrigem().equals("popup")) {
			return FORWARD_REALIZAR_ATENDIMENTO;
		}
		setResultadoConsulta(controleServico.consultar(getCliente()));
		return SUCCESS;
	}

	@Action(value = "abrirIncluir", results = {
		@Result(name = SUCCESS, location = LocalConstantes.LOCAL_JSP_CONTROLE_CLIENTE + "/incluir.jsp") 
	})
	public String abrirIncluir() throws Exception {
		return SUCCESS;
	}

	@Action(value = "confirmarInclusao", results = {
		@Result(name = SUCCESS, location = LocalConstantes.LOCAL_JSP_CONTROLE_CLIENTE + "/confirmarInclusao.jsp") 
	})
	public String confirmarInclusao() throws Exception {
		return SUCCESS;
	}
	
	@Action(value = "incluir", results = {
		@Result(name = SUCCESS, params = {"actionName", "abrirConsultar"}, type = "redirectAction") 
	})
	public String incluir() throws Exception {
		getCliente().setCadastrador(getUsuarioLogado());
		controleServico.salvar(getCliente());
		addActionMessage(getText("geral.mensagem.incluir", new String[]{NOME_ENTIDADE_SINGULAR}));
		return SUCCESS;
	}

	@Action(value = "abrirAlterar", results = {
		@Result(name = SUCCESS, location = LocalConstantes.LOCAL_JSP_CONTROLE_CLIENTE + "/alterar.jsp"),
		@Result(name = INPUT, params = {"actionName", "consultar"}, type = "redirectAction")
	})
	public String abrirAlterar() throws Exception {
		Cliente clienteBD = controleServico.getCliente(cliente.getId());
		if (clienteBD == null) {
			addActionError(getText("geral.mensagem.get", new String[]{NOME_ENTIDADE_SINGULAR}));
			return INPUT;
		}
		setCliente(clienteBD);
		return SUCCESS;
	}

	@Action(value = "confirmarAlteracao", results = {
		@Result(name = SUCCESS, location = LocalConstantes.LOCAL_JSP_CONTROLE_CLIENTE + "/confirmarAlteracao.jsp") 
	})
	public String confirmarAlteracao() throws Exception {
		return SUCCESS;
	}
	
	@Action(value = "alterar", results = {
		@Result(name = SUCCESS, params = {"actionName", "consultar"}, type = "redirectAction") 
	})
	public String alterar() throws Exception {
		addActionMessage(getText("geral.mensagem.alterar", new String[]{NOME_ENTIDADE_SINGULAR}));
		controleServico.alterar(getCliente());
		return SUCCESS;
	}

	@Action(value = "detalhar", results = {
		@Result(name = SUCCESS, location = LocalConstantes.LOCAL_JSP_CONTROLE_CLIENTE + "/detalhar.jsp") 
	})
	public String detalhar() throws Exception {
		return SUCCESS;
	}

	public String getNomeEntidadeSingular() {
		return NOME_ENTIDADE_SINGULAR;
	}
	
	public String getNomeEntidadePlural() {
		return NOME_ENTIDADE_PLURAL;
	}

	public String getOrigem() {
		return origem;
	}

	public void setOrigem(String origem) {
		this.origem = origem;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public List<Cliente> getResultadoConsulta() {
		return resultadoConsulta;
	}

	public void setResultadoConsulta(List<Cliente> resultadoConsulta) {
		this.resultadoConsulta = resultadoConsulta;
	}

	public ControleServico getControleServico() {
		return controleServico;
	}

	public void setControleServico(ControleServico controleServico) {
		this.controleServico = controleServico;
	}
	
	private Usuario getUsuarioLogado() {
		Usuario usuarioLogado = new Usuario();
		usuarioLogado.setId(1);
		return usuarioLogado;
	}
}
